package com.mr_ladeng.utils;

import android.graphics.Bitmap;
import android.support.v4.util.LruCache;

import com.android.volley.toolbox.ImageLoader.ImageCache;

public class ImageCacheManager implements ImageCache {
	private static ImageCacheManager imageCacheManager;
	public SoftCacheManager softCacheManager = SoftCacheManager.getInstance();

	// 利用单例模式生成对象
	public static ImageCacheManager getInstance() {
		if (imageCacheManager == null) {
			imageCacheManager = new ImageCacheManager();
		}
		return imageCacheManager;
	}

	// 创建一个LruCache对象
	LruCache<String, Bitmap> lruCache = new LruCache<String, Bitmap>(
			40 * 1024 * 1024) {

		@Override
		protected void entryRemoved(boolean evicted, String key,
				Bitmap oldValue, Bitmap newValue) {
			// 在此应把被驱逐的图片放入软引用中
			// 判断是否为被驱逐
			if (evicted) {
				// oldValue就是被驱逐的图片
				softCacheManager.putBitmap(key, oldValue);
			}
		}

		@Override
		protected int sizeOf(String key, Bitmap value) {
			// TODO Auto-generated method stub
			return value.getRowBytes() * value.getHeight();
		}
		// 第一个 sizeOf
		// 第二个 驱逐

	};

	public Bitmap getBitmap(String url) {
		// 自定义一级缓存与Volley接口结合的入口
		// 当Volley本身获取图片时，会先执行该方法
		// 如果重写了就执行自定义的一级缓存
		if (lruCache.get(url) == null) {
			if (softCacheManager.getBitmap(url) != null) {
				lruCache.put(url, softCacheManager.getBitmap(url));
				softCacheManager.removeBitmap(url);
			}
		}
		return lruCache.get(url);
	}

	public void putBitmap(String url, Bitmap bitmap) {
		// 自定义一级缓存与Volley接口结合的入口
		lruCache.put(url, bitmap);
	}

}
